﻿<!DOCTYPE html>
<html>

<head>
	<meta charset=utf-8>
	<title>Effekseer For Cocos2d-x</title>
	<link href="base.css" rel="stylesheet" type="text/css" />
</head>

<body>
	<div class="main">
		<h1>Effekseer For Cocos2d-x</h1>
		
		<h2>摘要</h2>

		<p>
      Effekseer是一个可以轻松地创建美丽的粒子效果的工具。本库将能够在Cocos2d-X内播放由Effekseer创建而成的粒子效果。
      本文档会介绍如何在Cocos2d-x内使用本程式库。
      程式库是由复数源代码组成，通过新增本源代码便可为Cocos2d-x进行安装。
		</p>

		<p>
      对应环境如下
		</p>

		<table>
			<tr>
				<td>Windows</td>
				<td>OK</td>
			</tr>

			<tr>
				<td>Mac OS X</td>
				<td>OK</td>
			</tr>

			<tr>
				<td>Linux</td>
				<td>Unknown</td>
			</tr>

			<tr>
				<td>iOS</td>
				<td>OK</td>
			</tr>

			<tr>
				<td>Android</td>
				<td>OK</td>
			</tr>

			<tr>
				<td>WindowsPhone</td>
				<td>Unknown</td>
			</tr>

		</table>

		<div align="Center">
			<img src="Top.png">
		</div>

		<h2>如何安装</h2>
		<p>
		<b>Players/Cocos2d-x_v3</b>文件夹内会包含以下文件。
		</p>

<ul>
<li>Effekseer.cpp</li>
<li>Effekseer.h</li>
<li>EffekseerNative.cpp</li>
<li>EffekseerNative.h</li>
<li>EffekseerRendererNative.cpp</li>
<li>EffekseerRendererNative.h</li>
</ul>

		<p>
      将这些文件复制到的Cocos2d-x的文件夹内，再设定成编译对象。
		</p>


		<h2>如何使用</h2>

<p>
在<b>Samples/</b>文件夹内会有在Cocos2d-x内播放Effekseer粒子效果的样本。本文件只会作出简单的使用方法。详细请参阅样本。
</p>

<p>
  样本是不包含在此程式库内，请将各样本复制到<b>Classes/Effekseer</b>文件夹内使用。
  为方便得知文件存放的位置、会有一个名为<b>copyEffekseerFiles.txt</b>的文件作为标签而作识别。
</p>

<h3>有关可播放的文件</h3>

<p>
  您只可以播放由Effekseer保存而成的文件。由Effekseer保存的文件中包含图像的相对路径。因此，请留意各档案的存放位置。
</p>

<h3>基本播放</h3>

<p>
  由Effekseer保存而成的文件可在cocos2d-x内播放。欲了解更多资讯，请查看存储在<b>Samples/Simple/</b>内的源代码。
</p>

<br>

<p>
包括Effekseer.h。
</p>

<pre>
#include "Effekseer/Effekseer.h"
</pre>
<br>

<p>
  在cocos2d::Scene或Layer的衍生类别内加入成员变量efk::EffectManager*。

</p>

<pre>
class HelloWorld : public cocos2d::Scene /* Layer */ {
efk::EffectManager* manager = nullptr;
...
</pre>
<br>

<p>
  创建对象efk::EffectManager*。
</p>

<pre>
manager = efk::EffectManager::create(Director::getInstance()->getVisibleSize());
</pre>
<br>

<p>
读取粒子效果文件
</p>

<pre>
auto effect = efk::Effect::create("Laser01.efk");
</pre>
<br>

<p>
  建立发射极，并通过将参数添加到阶层。
</p>

<pre>
auto emitter = efk::EffectEmitter::create(manager);
emitter->setEffect(effect);
emitter->setPlayOnEnter(true);

emitter->setPosition(Vec2(300, 300));
emitter->setScale(20);
this->addChild(emitter, 0);

// No need (because it uses autorelease after 1.41)
//effect->release();
</pre>

<p>
  更新画面。
</p>

<pre>
manager->update();
</pre>
<br>

<p>
衍生visit，使可添加的绘制效果的处理。
</p>

<pre>
void HelloWorld::visit(
	cocos2d::Renderer *renderer, 
	const cocos2d::Mat4& parentTransform, 
	uint32_t parentFlags)
{
	manager->begin(renderer, _globalZOrder);
	cocos2d::Scene::visit(renderer, parentTransform, parentFlags);
	manager->end(renderer, _globalZOrder);
}
</pre>
<br>

<p>
  删除执行对象。
</p>

<pre>
HelloWorld::~HelloWorld()
{
	manager->release();
}
</pre>

<h3>3D</h3>

<p>请阅读 <b>Samples/3D/</b> 中的示例. </p>

<p>你需要在cocos2d-x的Scene中添加一个摄像头</p>

<pre>
auto s = Director::getInstance()->getWinSize();
camera = Camera::createPerspective(60, (GLfloat)s.width / s.height, 1, 1000);
camera->setPosition3D(Vec3(100, 100, 100));
camera->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0));
camera->setCameraFlag(cocos2d::CameraFlag::USER1);
</pre>


<p>
除了更新manager之外，还需要将摄像机参数设置到manager中。
</p>
		
<pre>
manager->update();
manager->setCameraMatrix(camera->getViewMatrix());
manager->setProjectionMatrix(camera->getProjectionMatrix());
</pre>

<h3>网络</h3>

<p>当应用程序运行时，您可以从外部通过网络编辑应用程序（游戏等）中的播放效果。</p>

<img src="img/network.png" width="800">

<p>创建服务器实例并使用要从Effekseer连接的端口执行makeNetworkServerEnabled作为此函数的参数。</p>

<pre>
networkSever = efk::NetworkServer::create();
networkSever->makeNetworkServerEnabled(60000);
</pre>

<p>
除了更新manager之外，还需要更新服务器。然后你可以编辑Effekseer的效果。要从另一台计算机编辑效果，必须使用防火墙的设置打开端口。
</p>

<pre>
manager->update();
networkSever->update();
</pre>

		<h2>授权</h2>

<p>
  如使用Effekseer，你需要添加下面的措辞。 （例如在帮助内）。
</p>

<pre>
The MIT License (MIT)

Copyright (c) 2011 Effekseer Project

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</pre>

<h2>更新</h2>

<h3>1.43c (19/09/16)</h3>
<p>fixed a bug which causes crash if PlayOnEnter is false, and call play after next frame</p>
<p>fixed a bug that parameters are not applied which are assigned before playing</p>

<h3>1.43b (19/08/03)</h3>
<p>Fixed OpenGL blend bug</p>
<p>Fixed Samples</p>

<h3>1.43 (19/03/02)</h3>
<p>Added network functions</p>

<h3>1.42 (19/02/08)</h3>
<p>Added image caching function</p>
<p>Added documentation</p>
<p>Fixed bug that the behavior of the ribbon and track generated with the 0th frame is wrong</p>
<p>Fixed bug that SSE buffer overrun crashes</p>
<p>Fixed bug that crashes on Android when specifying easing of color</p>

<h3>1.41 (18/11/10) </h3>
<p>Fixed a bug causes crach when setRemoveOnStop is used. Fixed memory leak in samples.</p>
<p>This release makes Effect and EffectEmitter released automatically. So you need to edit codes about release</p>

<p>1.40 (18/09/12) More functions added. Speed up with Android and iOS. Supported 3D.</p>

<p>1.30 (17/11/03) 发布。</p>

	</div>
</body>

</html>
